home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48hor1
/
brix.doc
< prev
next >
Wrap
Text File
|
1995-03-31
|
12KB
|
183 lines
Item: 752 by vervalin at AUSTIN.LOCKHEED.COM
Author: Documentation by Paul Vervalin; BRIX by Andreas Gustafsson.
Subj: BRIX decoded
Keyw: CHIP48 BRIX
Date: Sat Sep 15 1990 09:57
Below is a detailed description of the BRIX game that is run with the CHIP48
interpreter. I hope this helps others when writing programs using CHIP48.
All of this is hand typed so please forgive me if there are any typos.
Happy programming!!
register contents
------------------------------------------------------
V0 scratch
V1 scratch
V2 scratch
V3 X coordinate of score
V4 Y coordinate of score
V5 bricks hit counter
V6 ball X coordinate
V7 ball Y coordinate
V8 ball X direction
V9 ball Y direction
VA X coordinate when generating bricks
VB Y coordinate when generating bricks
VC paddle X coordinate
VD paddle Y coordinate
VE ball counter
VF collision detect
address instruction code comment
-------------------------------------------------------------------------------
200 6E05 VE=05 set # balls to 5
202 6500 V5=00 init. bricks hit to zero
204 6B06 VB=06 set Y position of first brick
206 6A00 VA=00 set X position of first brick
208 A30C I=30C set address of brick sprite
20A DAB1 DRAW VA VB 1 BYTE draw brick sprite at loc. VA VB
20C 7A04 VA=VA+4 move along X to next brick loc.
20E 3A04 IF VA=4 SKIP NEXT if location wrapped goto next row
210 1208 JUMP 208 otherwise draw another
212 7B02 VB=VB+2 move down Y to next row
214 3B12 IF VB=12 SKIP NEXT if all rows drawn continue on
216 1206 JUMP 206 otherwise draw next row
218 6C20 VC=20 set X coordinate of paddle
21A 6D1F VD=1F set Y coordinate of paddle
21C A310 I=310 get address of paddle sprite
21E DCD1 DRAW VC VD 1 BYTE draw paddle at loc. VC VD
220 22F6 GOSUB 2F6 call subr. to output score
222 6000 V0=00 set X coord of balls remaining
224 6100 V1=00 set Y coord of balls remaining
226 A312 I=312 get address of balls sprite
228 D011 DRAW V0 V1 1 BYTE draw 4 of the five balls
22A 7008 V0=V0+8 set X to loc. of 5th ball sprite
22C A30E I=30E get address of single ball sprite
22E D011 DRAW V0 V1 1 BYTE draw 5th ball
230 6040 V0=40 set V0 to 40 for delay
232 F015 DELAY TIMER = V0 set delay timer
234 F007 V0 = DELAY TIMER check status of delay timer
236 3000 IF V0=00 SKIP NEXT if delay timer zero continue
238 1234 JUMP 234 otherwise go check status again
23A C60F V6=RANDOM AND 0F get random X coord for ball start
23C 671E V7=1E set Y coord of ball start
23E 6801 V8=01 set X direction to the right
240 69FF V9=FF set Y direction to up
242 A30E I=30E get address of ball sprite
244 D671 DRAW V6 V7 1 BYTE draw ball at loc V6 V7
246 A310 I=310 get address of paddle sprite
248 DCD1 DRAW VC VD 1 BYTE draw paddle at loc. VC VD
24A 6004 V0=04 set V0 to 04 for key number
24C E0A1 IF KEY V0 NOT PRESSED SKIP NEXT
24E 7CFE VC=VC+FE set X coord to 2 to the left
250 6006 V0=06 set V0 to 06 for key number
252 E0A1 IF KEY V0 NOT PRESSED SKIP NEXT
254 7C02 VC=VC+2 set X coord to 2 to the right
256 603F V0=3F set V0 right edge of screen
258 8C02 VC=VC AND V0 wrap paddle around if needed
25A DCD1 DRAW VC VD 1 BYTE draw paddle at loc. VC VD
25C A30E I=30E get address of ball sprite
25E D671 DRAW V6 V7 1 BYTE display ball at loc. V6 V7
260 8684 V6=V6+V8 move ball in X direction by V8
262 8794 V7=V7+V9 move ball in Y direction by V8
264 603F V0=3F set highest X coord.
266 8602 V6=V6 AND V0 AND ball X pos. with V0
268 611F V1=1F set highest Y coord
26A 8712 V7=V7 AND V1 AND ball Y pos. with V1
26C 471F IF V7 != 1F SKIP NEXT if ball not at bottom skip
26E 12AC JUMP 2AC otherwise jump to 2AC
270 4600 IF V6 != 00 SKIP NEXT if ball not at left side, skip
272 6801 V8=01 else set X direction to right
274 463F IF V6 != 3F SKIP NEXT if ball not at right side, skip
276 68FF V8=FF else set X direction to left
278 4700 IF V7 != 00 SKIP NEXT if ball not at top, skip
27A 6901 V9=01 else set Y direction down
27C D671 DRAW V6 V7 1 BYTE draw ball at loc. V6 V7
27E 3F01 IF VF = 1 SKIP NEXT if there was a collision skip
280 12AA JUMP 2AA otherwise jump to 2AA
282 471F IF V7 != 1F SKIP NEXT if ball not at bottom skip
284 12AA JUMP 2AA otherwise jump to 2AA
286 6005 V0=05 set V0 for 5 lines at screen top
288 8075 V0=V0-V7 check if ball was in this region
28A 3F00 IF VF = 00 SKIP NEXT if it was not then skip
28C 12AA JUMP 2AA otherwise jump to 2AA
28E 6001 V0=01 there was a collision
290 F018 SOUND TIMER = V0 so beep
292 8060 V0=V6 get X coord of ball
294 61FC V1=FC compute postion of the brick
296 8012 V0=V0 AND V1 that was hit
298 A30C I=30C get address of brick sprite
29A D071 DRAW V0 V7 1 BYTE erase brick sprite by drawing
29C 60FE V0=FE reverse the Y direction of the
29E 8903 V1=V1 XOR V0 ball sprite
2A0 22F6 GOSUB 2F6 call subr. to update score
2A2 7501 V5=V5+1 incr. bricks hit counter by one
2A4 22F6 GOSUB 2F6 call subr. to update score
2A6 4560 IF V5 = 60 SKIP NEXT if all bricks have been hit, skip
2A8 12DE JUMP 2DE else infinite loop (game over)
2AA 1246 JUMP 246 goto address 246
2AC 69FF V9=FF ball at bottom so set direct. up
2AE 8060 V0=V6 get X coord. of ball
2B0 80C5 V0=V0-VC intersect with paddle
2B2 3F01 IF VF = 01 SKIP NEXT if intersect then skip
2B4 12CA JUMP 2CA otherwise goto 2CA
2B6 6102 V1=02 |
2B8 8015 V0=V0-V1 |
2BA 3F01 IF VF = 1 SKIP NEXT |
2BC 12E0 JUMP 2E0 |
2BE 8015 V0=V0-V1 | this portion determines the
2C0 3F01 IF VF = 1 SKIP NEXT | direction that the ball should
2C2 12EE JUMP 2EE | bounce.
2C4 8015 V0=V0-V1 |
2C6 3F01 IF VF = 1 SKIP NEXT |
2C8 12E8 JUMP 2E8 |
2CA 6020 V0=20 set beep delay
2CC F018 SOUND TIMER = V0 beep for lost ball
2CE A30E I=30E get addres for ball sprite
2D0 7EFF VE=VE+FF remove one from ball count
2D2 80E0 V0=VE set V0 to ball count
2D4 8004 V0=V0+V0 compute location of ball to erase
2D6 6100 V1=00 set Y coord. to top line
2D8 D011 DRAW V0 V1 1 BYTE erase ball from remaining
2DA 3E00 IF VE = 00 SKIP NEXT if no balls remain, skip
2DC 1230 JUMP 230 otherwise goto 230
2DE 12DE JUMP 2DE jump to end of game
2E0 78FF V8=V8+FF make ball go left
2E2 48FE IF V8 != FE SKIP NEXT if ball was not going left, skip
2E4 68FF V8=FF else make it go left by 1 not 2
2E6 12EE JUMP 2EE goto paddle beep
2E8 7801 V8=V8+1 make ball go right
2EA 4802 IF V8 != 2 SKIP NEXT if ball was not going right, skip
2EC 6801 V8=01 else make it go right by 1 not 2
2EE 6004 V0=04 set beep time for paddle hit
2F0 F018 SOUND TIMER = V0 turn on beep
2F2 69FF V9=FF set ball direction to up
2F4 1270 JUMP 270 goto 270
2F6 A314 I=314 set address to BCD score location
2F8 F533 STORE BCD OF V5 IN I..I+2 store BCD of score
2FA F265 READ FROM I..I(V2)
2FC F129 I=5 BYTE SPRITE CHAR IN V1 get font for tens value from V1
2FE 6337 V3=37 set X coord. of score tens place
300 6400 V4=00 set Y coord of score
302 D345 DRAW V3 V4 5 BYTES draw tens place score #
304 7305 V3=V3+5 set X coord. of score ones place
306 F229 I=5 BYTE SPRITE CHAR IN V2 get font for ones value from V2
308 D345 DRAW V3 V4 5 BYTES draw ones place score #
30A 00EE RETURN
30C E000 brick sprite
30E 8000 ball sprite
310 FC00 paddle sprite
312 AA00 balls remaining sprite
314 0000 score storage
316 0000 score storage
_____ _______
********************************* HP48SX / ___ \ /__ (\
* * .----------. || || /( _) z) \
* Paul Vervalin * |]]]]]]].-.| ||___|| |. V__ (_ \/|
* * |]]]]]]]| || \_____/ | ( ) ) | |
* vervalin@AUSTIN.LOCKHEED.COM * |]]]]]]]| || .-------. [ |/ (_/ |
* * |]]]]]]]`-']---[ AMIGA ]__/ \ `. /
********************************* `----------' `-------' \_______/